home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-11-27 | 3.0 KB | 161 lines | [TEXT/PJMM] |
- { MultiLine Unit by Steve Sheets 11/15/87 }
-
- { Simple Edit Fields for Multible Keyboards. }
-
- UNIT MultiLine;
-
- INTERFACE
-
- {Data Type containing Text Str, Prompt Str, Cursor Char, Cursor Width,}
- { Frame Rect, Frame Flag, Horizontal Start Position, Horizontal Current}
- { Postion, Horizontal Prompt Position, Vertical Start Postion.}
- TYPE
- MLRec = RECORD
- St, Pr : Str255;
- Cr : char;
- CW : integer;
- Fr : rect;
- FF : boolean;
- StartH, CurH, PrH, StartV : integer;
- END;
-
- {Draws the Rec Edit Field}
- PROCEDURE MLupdate (Rec : MLRec);
-
- {Resets the Rec Edit Field, after someone has changed a setting.}
- PROCEDURE MLreset (VAR Rec : MLRec);
-
- {Initalize the Rec Edit Field}
- PROCEDURE MLinit (VAR Rec : MLRec;
- Prompt : str255;
- Tx : str255;
- Curs : char;
- Box : rect;
- FrFlag : boolean);
-
- {Handle a Key (Printable Keys & Backspace)}
- PROCEDURE MLchar (VAR Rec : MLRec;
- C : char);
-
- {Reset the Text Str to S (calls MLReset).}
- PROCEDURE MLtext (VAR Rec : MLRec;
- S : str255);
-
- IMPLEMENTATION
-
- PROCEDURE MLupdate;
- VAR
- R2 : rect;
- BEGIN
- WITH Rec DO
- BEGIN
- IF FF THEN
- BEGIN
- FrameRect(Fr);
- R2.left := Fr.left + 1;
- R2.right := Fr.right - 1;
- R2.top := Fr.top + 1;
- R2.bottom := Fr.bottom - 1;
- EraseRect(R2);
- END
- ELSE
- EraseRect(Fr);
- MoveTo(StartH, StartV);
- IF Pr <> '' THEN
- DrawString(Pr);
- DrawString(St);
- IF CW > 0 THEN
- DrawChar(Cr);
- END;
- END;
-
- PROCEDURE MLreset;
- BEGIN
- WITH Rec DO
- BEGIN
- CurH := StartH;
- IF Pr <> '' THEN
- CurH := CurH + StringWidth(Pr);
- PrH := CurH;
- IF St <> '' THEN
- CurH := CurH + StringWidth(St);
- IF Cr <> ' ' THEN
- CW := CharWidth(Cr)
- ELSE
- CW := 0;
- END;
- MLupdate(Rec);
- END;
-
- PROCEDURE MLinit;
- BEGIN
- WITH Rec DO
- BEGIN
- Fr := Box;
- St := Tx;
- Pr := Prompt;
- StartH := Fr.left + 5;
- StartV := Fr.top + 16;
- FF := FrFlag;
- Cr := Curs;
- END;
- MLreset(Rec);
- END;
-
- PROCEDURE MLchar;
- VAR
- Small : str255;
- L : integer;
- BEGIN
- WITH Rec DO
- IF Ord(C) = 8 THEN
- BEGIN
- L := Length(St);
- IF L > 0 THEN
- BEGIN
- CurH := CurH - CharWidth(St[L]);
-
- TextMode(srcBic);
- MoveTo(CurH, StartV);
- DrawChar(St[L]);
- IF CW > 0 THEN
- DrawChar(Cr);
-
- TextMode(srcOr);
- MoveTo(CurH, StartV);
- IF CW > 0 THEN
- DrawChar(Cr);
- Delete(St, L, 1);
- END;
- END
- ELSE IF (Ord(C) >= 32) THEN
- BEGIN
- IF CharWidth(C) + CW + CurH < Fr.right THEN
- BEGIN
- MoveTo(CurH, StartV);
- IF CW > 0 THEN
- BEGIN
- TextMode(srcBic);
- DrawChar(Cr);
- TextMode(srcOr);
- MoveTo(CurH, StartV);
- END;
- DrawChar(C);
- CurH := CurH + CharWidth(C);
- IF CW > 0 THEN
- DrawChar(Cr);
-
- Small := '@';
- Small[1] := C;
- St := CONCAT(St, Small);
- END;
- END;
- END;
-
- PROCEDURE MLtext;
- BEGIN
- Rec.St := S;
- MLReset(Rec);
- END;
-
- END.